package com.longteng;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

/**
 * 第7题（计15分）
 * 某人做家务的统筹工序与耗时描述如下：
 * a)洗菜（10 分钟）
 * b)切菜（2 分钟），同时锅里热油（30 秒）
 * c)炒菜（3 分钟）
 * d)出锅装盘（1 分钟）
 * 请给出模拟上述应用的 Java 代码清单，具体要求为：
 * 1）拆解上述工序任务，分配给多线程执行；
 * 2）指定用多线程的 Future 模式来实现异步任务之间的结果依赖。
 */

public class TestTwo {


    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> xicaiTask = new FutureTask<>(() -> {
            System.out.println("洗菜10分钟");
            //TimeUnit.MINUTES.sleep(10);
            TimeUnit.SECONDS.sleep(10);

            return "洗菜完成";
        });

        new Thread(xicaiTask).start();
        String xicaiResult = xicaiTask.get();
        System.out.println(xicaiResult);

        FutureTask<String> qiecaiTask = new FutureTask<>(() -> {
            System.out.println("切菜2分钟");
            //TimeUnit.MINUTES.sleep(2);
            TimeUnit.SECONDS.sleep(2);
            return "切菜完成";
        });

        FutureTask<String> reyouTask = new FutureTask<>(() -> {
            System.out.println("热油30秒");
            TimeUnit.SECONDS.sleep(1);
            return "热油完成";
        });

        new Thread(qiecaiTask).start();
        String qiecaiResult = qiecaiTask.get();
        System.out.println(qiecaiResult);

        new Thread(reyouTask).start();
        String reyouResult = reyouTask.get();
        System.out.println(reyouResult);

        FutureTask<String> chuguozhuangpanTask = new FutureTask<>(() -> {
            System.out.println("出锅装盘1分钟");
            //TimeUnit.MINUTES.sleep(1);
            TimeUnit.SECONDS.sleep(1);

            return "出锅装盘完成";
        });
        new Thread(chuguozhuangpanTask).start();
        String chuguozhuangpanResult = chuguozhuangpanTask.get();
        System.out.println(chuguozhuangpanResult);
    }
}
